const testIs = function (url, type, status) {
  it(
    url + ' return ' + (status || 200) + ' and is ' + type.toString(),
    function (done) {
      supertest(app)
        .get(url)
        .expect(status || 200)
        .expect('Content-Type', type, done);
    },
  );
};

const prefix = 'test-style';

describe('Styles', function () {
  describe('/styles/' + prefix + '/style.json is valid style', function () {
    testIs('/styles/' + prefix + '/style.json', /application\/json/);

    it('contains expected properties', function (done) {
      supertest(app)
        .get('/styles/' + prefix + '/style.json')
        .expect(function (res) {
          expect(res.body.version).to.be.equal(8);
          expect(res.body.name).to.be.a('string');
          expect(res.body.sources).to.be.a('object');
          expect(res.body.glyphs).to.be.a('string');
          expect(res.body.sprite).to.be.a('string');
          expect(res.body.sprite).to.contain('/test/styles/test-style/sprite');
          expect(res.body.layers).to.be.a('array');
        })
        .end(done);
    });
  });
  describe('/styles/streets/style.json is not served', function () {
    testIs('/styles/streets/style.json', /./, 404);
  });

  describe('/styles/' + prefix + '/sprite[@2x].{format}', function () {
    testIs('/styles/' + prefix + '/sprite.json', /application\/json/);
    testIs('/styles/' + prefix + '/sprite@2x.json', /application\/json/);
    testIs('/styles/' + prefix + '/sprite.png', /image\/png/);
    testIs('/styles/' + prefix + '/sprite@2x.png', /image\/png/);
  });

  describe('/styles/' + prefix + '/sprite/default[@2x].{format}', function () {
    testIs('/styles/' + prefix + '/sprite/default.json', /application\/json/);
    testIs(
      '/styles/' + prefix + '/sprite/default@2x.json',
      /application\/json/,
    );
    testIs('/styles/' + prefix + '/sprite/default.png', /image\/png/);
    testIs('/styles/' + prefix + '/sprite/default@2x.png', /image\/png/);
  });
});

describe('Fonts', function () {
  testIs('/fonts/Open Sans Bold/0-255.pbf', /application\/x-protobuf/);
  testIs('/fonts/Open Sans Regular/65280-65535.pbf', /application\/x-protobuf/);
  testIs(
    '/fonts/Open Sans Bold,Open Sans Regular/0-255.pbf',
    /application\/x-protobuf/,
  );
  testIs('/fonts/Nonsense,Open Sans Bold/0-255.pbf', /./, 400);

  testIs('/fonts/Nonsense/0-255.pbf', /./, 400);
  testIs('/fonts/Nonsense1,Nonsense2/0-255.pbf', /./, 400);
});
